#ifndef __DRAWABLE_H__
#define __DRAWABLE_H__

#include <GL/glut.h>

#include "Material.h"
#include "CoordF.h"

/*
 * Classe: Drawable
 *
 *   Interface para objetos que podem ser renderizados (desenhados na tela)
 *
*/
  
class Drawable
{
      protected:
             Material mMat;
             CoordF cPos, cRot;
             
             virtual void renderRotation();
             virtual void renderTranslation();
      public:
             Drawable() : cPos(0,0,0), cRot(0,0,0) {}
             Drawable(CoordF p) : cRot(0,0,0) { setPos(p); }
             Drawable(CoordF p, CoordF r) { setPos(p); setRotation(r); }
             ~Drawable() {}
             
             virtual void displace(const CoordF &v) { cPos += v; }
             virtual void setPos(CoordF newPos) { cPos = newPos; }
             virtual void setPosX(GLfloat newX) { cPos.x = newX; }
             virtual void setPosY(GLfloat newY) { cPos.y = newY; }
             virtual void setPosZ(GLfloat newZ) { cPos.z = newZ; }
             virtual CoordF getPos() { return(cPos); }

             virtual CoordF getRotation () { return cRot; }
             virtual void setRotation ( CoordF r ) { cRot = r; }

             virtual void rotate ( CoordF r );

             virtual Material * material() { return (&mMat); }

             virtual void draw() {};
};

#endif
